# mzrepos - сервис просмотра содержимого репозиториев Минздрава РФ со спецификациями СЭМД

Сервис получает информацию с nsi.rosminzdrav.ru и git.minzdrav.gov.ru, после чего предоставляет доступ к ней в режиме просмотра. В репозиториях спецификаций СЭМД можно просматривать содержимое по установленным тегам, т.е. опубликованным на https://portal.egisz.rosminzdrav.ru/materials спецификациям и схематронам.

По умолчанию в каждом репозитории устанавливается версия, соответствующая последнему по времени тегу. Возможно просмотреть состояние репозитория по любому тегу.

Дополнительные возможности:
- скачать весь репозиторий спецификации СЭМД (необходима авторизация)
- скачать все спецификации СЭМД, но без pdf, doc и docx файлов. Все репозитории скачиваются на текущие состояния репозиториев. Если состояние какого-то из репозитория было установлен на тег, отличный от последнего по времени, то будут скачаны файлы в состоянии на время этого тега.
 

## Описание структуры проекта
### init.py - создание SQLite базы

База создается в папке, заданной в переменной ``DATA_PATH`` файла ``prefs.py``. Для получения доступа из веб сервера к базе необходимо задать переменные ``APACHE_USER`` и ``APACHE_GROUP`` в файле ``prefs.py`` значениями, которые использует веб сервер. Папке, указанной в ``DATA_PATH`` необходимо установить владельца и группу теми же значениями, которые использует веб сервер.

### prefs.py - настройки сервиса 
См. пример файла.
После внесения изменений в файл может потребоваться перезапуск веб сервера, чтобы настройки применились.

### mzrepos.wsgi - основной скрипт
В скрипте реализованы следующие страницы веб интерфейса
#### index.html - просмотр списка репозиториев спецификаций СЭМД
На странице выводится список типов РЭМД, для которых имеются репозитории с руководствами по реализации. На сером фоне показываются те типы, которые уже не регистрируются РЭМД. В первой колонке выводится информация о поддержке типа СЭМД в 1С:Медицина:
- буква К означает, что СЭМД поддержан непосредственно в конфигурации
- буква Ш означает, что СЭМД поддержан через ШМД в сервисе распространения ШМД.
Внизу страницы выводится сводная информация о регистрируемых типах СЭМД и их поддержке в 1С:Медицина.

#### repo/N - просмотр репозитория
Просмотр репозитория для СЭМД с типом РЭМД N.

#### file/N/name - открытие файла
Открытие файла с именем name из репозитория для СЭМД с типом РЭМД N. Файл открыватся в состоянии на активный тег

#### s/checkout/N/tag - чекаут 
Перевод репозитория для СЭМД с типом РЭМД N в состояние на момент установки тега tag. Требуется авторизация.

#### s/clear_all - сброс тегов
Все репозитории переводятся в состояния, соответствующие последним по времени тегам. Требуется авторизация.

#### s/download_repo/N - скачивание репозитория
Скачивание репозитория для СЭМД с типом РЭМД N. Требуется авторизация.

#### s/download_all - скачивание всех спецификаций
Скачать все спецификации СЭМД, но без pdf, doc и docx файлов. Требуется авторизация.

#### s/check_validator_sch - проверка базы SCH файлов валидатора СЭМД
Открытие страницы с проверкой базы SCH файлов валидатора СЭМД (https://github.com/1CMedicine/semd_validator)

#### s/check_validator_xsd - проверка базы XSD файлов валидатора СЭМД
Открытие страницы с проверкой базы XSD файлов валидатора СЭМД (https://github.com/1CMedicine/semd_validator)

Примеры записей файла:
```
{"CODESYSTEM":"1.2.643.5.1.13.13.99.2.604", "LOAD":0, "COMMENT":"ЛЛО"},
{"CODESYSTEM":"1.2.643.5.1.13.13.11.1039", "VALUE":"FULL_NAME"},
```


## Установка
1) Подключить модуль mod_wsgi из пакета libapache2-mod-wsgi-py3
2) Скопировать файлы mzrepos.wsgi, prefs.py, init.py в папку /var/www/wsgi/mzrepos.
3) Внести настройки экземпляра сервиса в prefs.py
4) Запустить init.py
5) Зарегистрировать приложение WSGI в apache2.conf
```
	WSGIScriptAlias /wsgi/mzrepos /var/www/wsgi/mzrepos/mzrepos.wsgi
```

### Ограничение доступа
Для некотрых разделов сервиса предусмотрена возможность ограничить доступ. Такие разделы начинаются с префикса ``s/``. Чтобы ограничения доступа заработали нужно скопировать файл ``auth.wsgi`` в папку ``/var/www/wsgi/``, перечислить в нём пользователей и их пароли, а в настройки apache добавить следующий раздел.
```
<Location "/wsgi/mzrepos/s/">
    AuthType Basic
    AuthName "Restricted area"
    AuthBasicProvider wsgi
    WSGIAuthUserScript /var/www/wsgi/auth.wsgi
    Require valid-user
</Location>
```

Пример содержимого файла auth.wsgi
```
USERS = {
    "test" : "test"
}

def check_password(environ, user, password):
    if user in USERS:
        if password == USERS[user]:
            return True
        return False
    return None
```

